#!/bin/bash
# 功能：提取两个Git提交间的差异文件并保存到指定目录
# 用法：./changes.sh <旧提交> <新提交>

# 检查参数数量
if [ $# -lt 1 ]; then
    echo "错误：参数不正确"
    echo "用法: $0 <旧提交> 新提交]"
    exit 1
fi

v2=$1  # 较旧版本
v1=${2:-"HEAD"}  # 最新版本（可选，默认 HEAD)
TARGET_DIR=${3:-"./changes"}
OUTPUT_DIR="$TARGET_DIR/$v1"

# 如果v1为空，则使用HEAD（最新版本）
if [ -z "$v1" ]; then
    v1="HEAD"
fi

echo "旧版本: $v2"
echo "新版本: $v1"
echo "输出目录: $OUTPUT_DIR"

# 获取两个版本之间的差异文件列表
git diff --name-only $v2 $v1


# 创建目标目录
mkdir -p "$OUTPUT_DIR"

echo "Comparing $v2 (old) → $v1 (new)"
echo "Copying changed files to: $OUTPUT_DIR"


# 获取差异文件列表，并逐个复制
file_count=0
git diff --name-only --diff-filter=d "$v2" "$v1" | while read -r file; do
    if [ -f "$file" ]; then
        mkdir -p "$(dirname "$OUTPUT_DIR/$file")"
        cp -v "$file" "$OUTPUT_DIR/$file"
         ((file_count++))
    else
        echo "Warning: File '$file' does not exist (possibly deleted in $v1)."
    fi
done

echo "Done. Copied $file_count files to $OUTPUT_DIR"



